﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using BAL;
using DAL.Entities;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace GrouponDesktop.AbmProveedor
{
    public partial class AgregarProveedor : Form
    {
        public AgregarProveedor()
        {
            //Cambiamos el titulo
            InitializeComponent();

            //Traemos los rubros para elegir
            List<RubroEntity> rubros = new List<RubroEntity>();
            RubroBAL rubProxy = new RubroBAL();
            rubros = rubProxy.GetRubros();

            cboRubro.DisplayMember = "VarNombre";
            cboRubro.ValueMember = "IntIdRubro";
            cboRubro.DataSource = rubros;

            //Traemos las ciudades para elegir
            List<CiudadEntity> ciudades = new List<CiudadEntity>();
            CiudadBAL ciuProxy = new CiudadBAL();
            ciudades = ciuProxy.GetCiudades();

            cboCiudad.DisplayMember = "VarNombre";
            cboCiudad.ValueMember = "IntIdCiudad";
            cboCiudad.DataSource = ciudades;

        }
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                lblErrores.Text = string.Empty;
                if (ValidateForm())
                {
                    ProveedorBAL proxy = new ProveedorBAL();

                    //TODO: VERIFICAR LOS DATOS DE TELEFONO CODIGO PSOTAL Y DNI
                    ProveedorEntity prov = new ProveedorEntity();
                    prov.VarCUIT = txtCUIT.Text;
                    prov.VarDom = txtDireccion.Text;
                    prov.IntCodigoPostal = (txtCPostal.Text != string.Empty) ? Int32.Parse(txtCPostal.Text) : 0;
                    prov.VarMail = txtEmail.Text;
                    prov.VarNombreContacto = txtNombreContacto.Text;
                    //client.BigDNI = long.Parse(txtDNI.Text);
                    prov.VarRS = txtRS.Text;
                    prov.IntTelefono = long.Parse(txtTelefono.Text);

                    prov.IntIdCiudad = int.Parse(cboCiudad.SelectedValue.ToString());
                    prov.IntIdRubro = int.Parse(cboRubro.SelectedValue.ToString());

                    prov = proxy.AddProveedor(prov);



                    //Guardamos el password
                    UsuarioEntity user = new UsuarioEntity();
                    UsuarioBAL userProxy = new UsuarioBAL();
                    user.IntIdUsuario = prov.IntIdUsuario;
                    user = userProxy.GetUsuarioById(user);

                    user.VarPassword = txtPasswordConfirm.Text;
                    userProxy.SetPasswordByUsername(user);
                    MessageBox.Show("El usuario se creo exitosamente, su username es: " + txtCUIT.Text);
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error: " + ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }


        /// <summary>
        /// Funcion que valida si un mail esta bien escrito
        /// </summary>
        /// <param name="email"></param>
        /// <returns></returns>
        private Boolean email_bien_escrito(String email)
        {
            String expresion;
            expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
            if (Regex.IsMatch(email, expresion))
            {
                if (Regex.Replace(email, expresion, String.Empty).Length == 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// Funcion que valida el fomrmulario
        /// </summary>
        /// <returns></returns>
        public bool ValidateForm()
        {
            bool res = true;
            string errores = string.Empty;
            
            
            ProveedorBAL prox = new ProveedorBAL();

            //Validamos el cuit
            if (txtCUIT.Text != string.Empty)
            {
                ProveedorEntity _prov = new ProveedorEntity();
                _prov.VarCUIT = txtCUIT.Text;
                _prov = prox.GetProveedorByCuit(_prov);
                if (_prov.IntIdProveedor != null && _prov.IntIdProveedor != 0)
                {
                    errores += "El CUIT ya esta registrado\n";
                    res = false;
                }
                _prov.IntIdProveedor = 0;
            }
            else
            {
                errores += "El CUIT es obligatorio,";
                res = false;
            }

            //Validamos la razon social
             if (txtRS.Text != string.Empty)
            {
                
                ProveedorEntity _prov = new ProveedorEntity();
                _prov.VarRS = txtRS.Text;
                _prov = prox.GetProveedorByRazonSocial(_prov);
                if (_prov.IntIdProveedor != null && _prov.IntIdProveedor != 0)
                {
                    errores += "La Razon Social ya esta registrado\n";
                    res = false;
                }
                _prov.IntIdProveedor = 0;
            }
            else
            {
                errores += "La Razon Social es obligatorio\n";
                res = false;
            }
            
            if (txtDireccion.Text == string.Empty)
            {
                errores += "La direccion es obligatorio\n";
                res = false;
            }
            if (txtCPostal.Text == string.Empty)
            {
                errores += "El Codigo Postal es obligatorio\n";
                res = false;
            }
            else
            {
                try
                {
                    int algo = Int32.Parse(txtCPostal.Text);
                }
                catch (FormatException ex)
                {
                    errores += "El Codigo Postal no tiene un formato valido\n";
                    res = false;
                }

            }
            if (txtNombreContacto.Text == string.Empty)
            {
                errores += "El nombre de contacto es obligatorio\n";
                res = false;
            }
            if (txtEmail.Text == string.Empty)
            {
                errores += "El email es obligatorio\n";
                res = false;
            }
            else
            {
                //Validamos el mail
                if (!email_bien_escrito(txtEmail.Text))
                {
                    errores += "El email no es valido\n";
                    res = false;
                }
            }
            if (txtTelefono.Text == string.Empty)
            {
                errores += "El telefono es obligatorio\n";
                res = false;
            }
            else
            {
                try
                {
                    long algo = long.Parse(txtTelefono.Text);
                }
                catch (FormatException ex)
                {
                    errores += "El Telefono no tiene un formato valido\n";
                    res = false;
                }
            }

            //Verificamos el password
            if (txtPassword.Text == string.Empty && txtPasswordConfirm.Text == string.Empty)
            {
                errores += "Debe ingresar un password\n";
                res = false;
            }
            else {
                if (txtPassword.Text != txtPasswordConfirm.Text)
                {
                    errores += "Los password deben coincidir\n";
                    res = false;
                }
            }

            if(errores != string.Empty){
                MessageBox.Show(errores, "Hubo Errores");
            }
            return res;
        }
    }
}
